/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.datamodel;

import com.ec.socialfun.datamanager.EventoLocalSucursalDataManager;
import com.ec.socialfun.entidades.Evento;
import com.ec.socialfun.entidades.Local;
import com.ec.socialfun.entidades.Usuario;
import com.ec.socialfun.enumeradores.EstadoEnum;
import com.ec.socialfun.excepciones.RecuperaMembresiaException;
import com.ec.socialfun.servicios.EventoFacade;
import com.ec.socialfun.servicios.MembresiaFacade;
import com.ec.socialfun.servicios.SucursalFacade;
import com.ec.socialfun.servicios.UsuarioFacade;
import com.ec.socialfun.util.Consulta;
import com.ec.socialfun.util.LookupBeanUtil;
import java.util.List;
import java.util.Map;
import org.jboss.logging.Logger;
import org.primefaces.model.SortOrder;

/**
 *
 * @author DESARROLLO
 */
public class EventoLocalSucursalDataModel extends DataModelPadre<Evento> {

    EventoFacade eventoFacade = (EventoFacade) LookupBeanUtil.lookup(EventoFacade.class.getSimpleName());
    SucursalFacade sucuralFacade = (SucursalFacade) LookupBeanUtil.lookup(SucursalFacade.class.getSimpleName());
    UsuarioFacade usuarioFacade = (UsuarioFacade) LookupBeanUtil.lookup(UsuarioFacade.class.getSimpleName());
    MembresiaFacade membresiaFacade = (MembresiaFacade) LookupBeanUtil.lookup(MembresiaFacade.class.getSimpleName());
    private static final Logger LOG = Logger.getLogger(EventoLocalSucursalDataModel.class.getName());

    private String validarValorParametro() {
        String passedParameter = (String) obtenerValorRequest("id2");
        if (passedParameter != null) {
            EventoLocalSucursalDataManager dataManager = (EventoLocalSucursalDataManager) obtenerBean("eventoLocalSucursalDataManager");
            dataManager.setCodigoSucursal(passedParameter);
        } else {
            EventoLocalSucursalDataManager dataManager = (EventoLocalSucursalDataManager) obtenerBean("eventoLocalSucursalDataManager");
            passedParameter = dataManager.getCodigoSucursal();
        }
        return passedParameter;
    }

    private void validaSiExisteMembresia(String codigoSucursal) {
        EventoLocalSucursalDataManager dataManager = (EventoLocalSucursalDataManager) obtenerBean("eventoLocalSucursalDataManager");
        try {
            LOG.info("validaSiExisteMembresia 1 ");
            Local local = sucuralFacade.recuperarPorCodigo(Integer.parseInt(codigoSucursal)).getLoCodigo();
            Usuario usuario = usuarioFacade.recuperaUsuarioPorMail(this.obtenerUsuarioLogeado());
            membresiaFacade.recuperaMembresiaActivaPorUsuarioLocal(usuario.getUsCodigo(), local.getLoCodigo());
            dataManager.setMuestraReserva(true);
        } catch (RecuperaMembresiaException ex) {
            LOG.info("validaSiExisteMembresia 2 ");
            dataManager.setMuestraReserva(false);
        }
    }

    @Override
    public List<Evento> load(int indicePrimerRegistro, int tamanoPagina, String columnaOrdenamiento, SortOrder tipoDeOrdenamiento,
            Map<String, String> filtros) {

        String codigoSucursal = validarValorParametro();
        validaSiExisteMembresia(codigoSucursal);

        filtros.put("suCodigo.suCodigo", codigoSucursal);
        filtros.put("evEstado", "'" + EstadoEnum.ACTIVO.getCodigo() + "'");
        Consulta<Evento> consulta = new Consulta<Evento>();
        consulta.setPrimerRegistro(indicePrimerRegistro);
        consulta.setTamanoPagina(tamanoPagina);
        consulta.setColumnaOrdenar(columnaOrdenamiento);
        consulta.setTipoDeOrdenamiento(tipoDeOrdenamiento.name());
        consulta.setFiltro(filtros);


        consulta = eventoFacade.buscarEventoLocalSucursal(consulta);
       this.setRowCount(consulta.getContador());
        return consulta.getLista();
    }
}
